package passwordManage;

import java.util.Random;

public class Function {
	public String encrypt(String encryptedPassword) {
		//将每个字符的ASCII码加上它在字符串中的位置和偏移值3
	    StringBuilder encrypted = new StringBuilder();
	    for (int i = 0; i < encryptedPassword.length(); i++) {
	        char c = encryptedPassword.charAt(i);
	        int ascii = (int) c;
	        int newPosition = ascii + (i + 1) + 3;
	        encrypted.append((char) newPosition);
	    }
	    
	    //将字符串的第一位和最后一位调换顺序
	    if (encrypted.length() > 1) {
	        char firstChar = encrypted.charAt(0);
	        char lastChar = encrypted.charAt(encrypted.length() - 1);
	        encrypted.setCharAt(0, lastChar);
	        encrypted.setCharAt(encrypted.length() - 1, firstChar);
	    }

	    //将字符串反转
	    encrypted.reverse();
	    return encrypted.toString();
	}

	
	public String decrypt(String decryptedPassword) {
		//将字符串反转
	    StringBuilder reversed = new StringBuilder(decryptedPassword).reverse();
	    
	    //将字符串的第一位和最后一位调换顺序
	    if (reversed.length() > 1) {
	        char firstChar = reversed.charAt(0);
	        char lastChar = reversed.charAt(reversed.length() - 1);
	        reversed.setCharAt(0, lastChar);
	        reversed.setCharAt(reversed.length() - 1, firstChar);
	    }
	    
	    //将每个字符的ASCII码减去它在字符串中的位置和偏移值3
	    StringBuilder decrypted = new StringBuilder();
	    for (int i = 0; i < reversed.length(); i++) {
	        char c = reversed.charAt(i);
	        int ascii = (int) c;
	        int newPosition = ascii - (i + 1) - 3;
	        decrypted.append((char) newPosition);
	    }
	    
	    return decrypted.toString();
	}
	
	 public String checkPasswordStrength(String passwordToCheck) {	 	
	     //设置数字、大写字母和小写字母标识符   
		 int length = passwordToCheck.length();
		 boolean hasDigit = false;
		 boolean hasLowerCase = false;
		 boolean hasUpperCase = false;

         //利用循环检验字符串中是否含有数字、大写字母或小写字母，若有则将标识符改为true
		 for (int i = 0; i < length; i++) {
		     char c = passwordToCheck.charAt(i);
		     if (Character.isDigit(c)) {
		         hasDigit = true;
		     } else if (Character.isLowerCase(c)) {
		         hasLowerCase = true;
		     } else if (Character.isUpperCase(c)) {
		         hasUpperCase = true;
		     }
		 }
  
		 if (length < 8 || (hasDigit && !hasLowerCase && !hasUpperCase) || (!hasDigit && (hasLowerCase || hasUpperCase))) {
		     return "弱强度密码";//当条件为字符串长度小于八或者只有数字又或只有单一的大小写字母时判断密码为弱强度
		 } else if (hasDigit && hasLowerCase && hasUpperCase) {
		     return "高强度密码";//当条件为字符串长度大于八且含有数字、大写字母和小写字母时判断密码为高强度
		 } else {
		     return "中强度密码";//否则判断密码为中强度
		 }
	}
	 
	 public String generatePassword(int length) {
		    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
		    StringBuilder password = new StringBuilder();
		    //创建一个可变的字符串对象，用于存储生成的密码
		    Random random = new Random();
		    for (int i = 0; i < length; i++) {
		        int index = random.nextInt(characters.length());
		        password.append(characters.charAt(index));
		    }
		    //使用Java的随机数生成器来生成一个随机的索引值，然后从字符串中取出对应索引位置的字符，将其添加到密码字符串中，最后将密码字符串转换为字符串类型并返回。
		    return password.toString();
	}

     public void checkPassword(String password) throws InvalidPasswordException {
	        String pattern = "^[a-zA-Z0-9]{1,16}$";
	        if (!password.matches(pattern)) {//使用了一个正则表达式模式，该模式匹配长度在1到16之间的由数字、大写字母和小写字母组成的字符串，若不匹配，则抛出异常信息。
	            throw new InvalidPasswordException("非法密码，请重新输入！");
	        }
	}

     public void handleMenuOption(int option) throws InvalidMenuOptionException {
		    if (option < 1 || option > 5) {//若菜单选项不是1~5之间的数字，则抛出异常信息。
		        throw new InvalidMenuOptionException("无效的菜单选项,请重新输入！");
		    }
	}

}













    







    


	    



	





	    







    








    





